// 自定义的一个用来解析 request.url 的工具

const slash = '/';
const semicolon = ';';
const questionMark = '?';

// 对于 request.url 返回的字符串来说，可能是以下形式
// 1、/
// 2、/? 或 /register?
// 3、/?username=zhangsanfeng
// 4、/register?name=zhangsanfeng&gender=male&age=108
// 5、/sign/up;jsessionid=XXXXXXX?name=zhangsanfeng&gender=male&age=108
//   在 Java Servlet 使用了 URL-Rewrite (URL重写后)，若要跟踪会话就会在url中添加 ;jsessionid=XXXXXXX
// 6、/sign/up;jsessionid=XXXXXXX
let parse = function(url) {

    if (typeof(url) === 'string') {

        let path = '';
        let session = '';
        let query = '';

        let length = url.length; // 字符串长度
        let slashIndex = url.indexOf(slash); // 首个斜杠的位置
        if (slashIndex + 1 == length) { // 说明 url 中只有一个 "/"
            return { path: url, session, query };
        }
        let semicolonIndex = url.indexOf(semicolon); // 首个分号的位置
        let questionMarkIndex = url.indexOf(questionMark); // 首个问号的位置


        if (semicolonIndex != -1) { // 如果url中包括分号
            path = url.substring(0, semicolonIndex);
            if (semicolonIndex < questionMarkIndex) {
                // 如果既有分号又有问号
                session = url.substring(semicolonIndex + 1, questionMarkIndex);
                query = url.substring(questionMarkIndex + 1);
            } else {
                session = url.substring(semicolonIndex + 1);
            }
        } else { // 如果url中没有分号
            if (questionMarkIndex != -1) { // 如果url中包括问号
                path = url.substring(0, questionMarkIndex);
                if (questionMarkIndex < length) { // 如果问号不是url中最后一个字符
                    query = url.substring(questionMarkIndex + 1);
                }
            } else { // 没有分号没有问号
                path = url;
            }
        }
        //console.log(slashIndex, semicolonIndex, questionMarkIndex);
        //console.log(path, session, query);

        //return { path: path, session: session, query: query };
        // 当名称和属性值同名时可以简写为以下形式
        return { path, session, query };
    }

    return null;
}

// console.log(parse('/sign/up;jsessionid=XXXXXXX?name=zhangsanfeng&gender=male&age=108'));
// console.log(parse('/sign/up?name=zhangsanfeng&gender=male&age=108'));
// console.log(parse('/sign/up;jsessionid=XXXXXXX'));
// console.log(parse('/sign/up'));
// console.log(parse('/sign/up?'));
// console.log(parse('/'));

module.exports.parse = parse;